블로그 릴레이 - Amazon Bedrock 사용해보기

블로그 릴레이 - Amazon Bedrock 사용해보기

AWS에서 제공하는 LLM 서비스 Amazon Bedrock을 통해 RAG, 에이전트 등 여러가지를 쉽게 사용해 봅시다.
Clock Icon2024.07.08

안녕하세요. 제조 비지니스 테크놀로지부의 이병현입니다.

본 블로그는 당사의 한국어 블로그 릴레이의 네 번째 블로그입니다.
이번 블로그의 주제는 「Amazon Bedrock 사용해보기」 입니다.

Amazon Bedrock이란?

AWS에서 제공하는 LLM 서비스입니다. AWS에서 제공하는 모델뿐만 아니라 Anthropic의 Claude, Meta의 Llama 등등 외부 서비스들의 모델도 사용할 수 있습니다.

AWS 콘솔에서 채팅으로 이용할 수도 있고 SDK를 이용하여 서비스와 통합, RAG, 에이전트 등의 기능들을 제공합니다.

현재(2024/07) 서울 리전은 제공되고 있지 않습니다만, 도쿄 리전 등 사용 가능한 리전에서 사용해 보실 수 있습니다.

LLM

일반적인 LLM 서비스들 처럼 Amazon Bedrock 플레이그라운드에서 채팅으로 LLM 기능을 사용해 볼 수 있습니다. 비교 모드를 사용하면 모델을 비교해서 써볼 수도 있네요. 👀

스크린샷 2024-07-05 20.24.29

또한 AWS에서 제공하는 SDK를 통해서도 사용할 수 있습니다. 간단한 파이썬 스크립트로 claude를 이용해보겠습니다.

import boto3
import json

from botocore.exceptions import ClientError

brt = boto3.client("bedrock-runtime", region_name="ap-northeast-1")
model_id = "anthropic.claude-v2:1"

prompt = "Human: 안녕 밥은 먹고 다니니 \n Assistant:"

native_request = {
    "prompt": prompt,
    "max_tokens_to_sample": 300,
}

request = json.dumps(native_request)

try:
    response = brt.invoke_model(modelId=model_id, body=request)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

model_response = json.loads(response["body"].read())

response_text = model_response["completion"]
print(response_text)

죄송합니다. 제가 밥 먹는 것에 대해 의견을 제시할 수 없습니다. 저는 AI 어시스턴트니까요.

요런 응답이 오네요. 😅


LLM 기능에 대해서는 여러가지 모델들을 사용해 볼 수 있는 것, 그리고 기존에 AWS를 사용하고 있다면 익숙하게 통합시킬 수 있는 점이 장점이라고 느껴지네요. 물론 성능이 좋은 최신의 모델을 쓰는게 필요해보입니다.

RAG

RAG(검색 증강 생성)은 기존 모델에 학습된 데이터 이외에도 추가적인 데이터를 통해 프롬프트의 대답을 보강할 수 있습니다.

Amazon Bedrock은 Amazon S3와 Amazon Opensearch Serverless의 벡터 데이터베이스를 통해서 쉽게 구축할 수 있습니다.

Amazon Bedrock > 지식 기반 > 지식 기반 생성 에서 사용할 데이터의 S3를 설정하고 데이터베이스를 생성해보았습니다.

데이터베이스가 생성이 되고 나면 지식 기반 페이지에서 데이터 소스를 동기화 하면 됩니다.

저는 밥 먹었냐는 인사말을 잘 이해 못하는 것 같아서 해당 데이터를 추가해보았습니다.

동기화가 완료되면 지식 기반 페이지 오른쪽에서 지식 기반 테스트를 할 수 있습니다.

밥 먹었는지 물어보죠.

스크린샷 2024-07-05 20.28.30

오! 밥 먹었냐는 말이 인사말인지 인식을 했습니다.

스크린샷 2024-07-05 20.25.12

위는 실제로 제가 S3에 추가한 정보인데, 어디서 얻은 정보인지도 볼 수 있네요.

물론, 인사말임을 알았으면 인사를 해주었으면 좋겠지만, 인사말인지 알아낸 것만으르도 큰 발전이네요.


사내에 여러 정보들이 흩어져 있어서 찾고 싶은 내용을 찾기가 어렵다던지 하는 경우 데이터 소스에 등록하면 매우 유용하게 쓸 수 있을 것 같네요.

에이전트

LLM과 대화를 통해 실제 세상을 움직일 수 있으면 어떨까요?

에이전트 이러한 LLM에게 대화를 넘어서 실제 동작을 일으키게 할 수 있습니다. 예를 들어 AWS Lambda를 미리 준비해 LLM에게 어떠한 요청을 하면 그 동작을 람다가 실행을 시킨다던지 하는 것이 가능해지게 되는게 에이전트 기능입니다.

뿐만아니라 RAG의 연계, 프롬프트 커스텀, 대화 맥락 이해등 여러가지가 가능합니다.

사용해보기 위해서 API들을 만들어야 되나 싶었는데 작업 그룹을 생성하면 생기는 예제에서 보험의 클레임에 관한 API들이 준비되어 있었습니다. 이걸 통해 직접 한번 어떻게 동작하는지 확인해보죠.

현재 열려있는 클레임들을 보여달라고 해보았습니다.

스크린샷 2024-07-05 21.13.18

스크린샷 2024-07-05 21.13.45

제 요청에서 어떤 API를 불러야 할지 판단하고 해당 API를 사용하여 응답을 가져왔습니다! 🤖

그러면 열려있는 클레임들에 대해서 리마인더를 만들어달라고 해보죠.

스크린샷 2024-07-05 21.17.07

제 요청을 보고 열려 있는 클레임 API를 부른다음 해당 아이템들의 빠진 문서들을 확인하고, 리마인더를 보내는 작업을 설계했습니다!! 🤖🤖

그러면 설계한 대로 잘했나 볼까요?

스크린샷 2024-07-05 21.20.08

스크린샷 2024-07-05 21.20.18

무려 연속되는 3개의 API를 부른 후 성공적으로 보냈다는 안내까지 해주게 됩니다. 🤖🤖🤖


이렇게되면 연속적이고 복잡한 작업들을 LLM을 통해서 하는 일도 가능하겠네요.

마무리

LLM을 구글링과 코드 리뷰 대체로만 쓰고 있었던 것 같은데, 이번에 여러 가지 기능들을 사용해보고 가능성이 무궁무진 하다는 것을 깨달았습니다...

어쩌면 페이지로 이동해서 버튼을 찾아 누른다는 개념을 LLM을 통해 많이 줄여나가는 것도 가능하겠네요.


이상, 한국어 블로그 릴레이의 네 번째 블로그 「Amazon Bedrock 사용해보기」 편이었습니다. 다음 다섯 번째 블로그 릴레이는 김승연 님의 「Amplify Gen2 + React 인증 기능 까지 심플 구축해 보기」 입니다.

끝까지 읽어주셔서 감사합니다! 이상, 제조 비지니스 테크놀로지부의 이병현이었습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.